import { request } from '@/utils/service'

/**
 * 用户登录
 * 接口描述: 用户登录验证，支持学生/管理员/超级管理员角色
 * 接口必填项:
 * username-用户名/学号
 * password-密码
 * role-角色类型(0:学生, 1:普通管理员, 2:超级管理员)
 * @param {Object} data 登录数据
 * @param {Number} role 角色类型
 * @returns Promise
 */
export function loginApi(data, role) {
  // 根据角色选择不同的登录接口和数据格式
  if (role == 0) {
    // 学生登录
    return request({
      url: "student/login",
      method: "post",
      data: {
        sno: data.username, // 学生使用学号登录
        password: data.password
      }
    })
  } else {
    // 管理员登录
    return request({
      url: "admin/login",
      method: "post",
      data: {
        username: data.username,
        password: data.password
      }
    })
  }
}

/**
 * 用户注册
 * 接口描述: 新用户注册，默认角色为学生，使用学生添加接口
 * 接口必填项:
 * sno-学号
 * name-姓名
 * classId-班级ID
 * password-密码
 * @param {Object} data 注册数据
 * @returns Promise
 */
export function registerApi(data) {
  // 转换数据格式以匹配后端Student实体
  const studentData = {
    sno: data.studentId,  // 前端使用studentId，后端使用sno
    name: data.name,
    classId: data.classId,
    password: data.password,
    role: "STUDENT"  // 固定为学生角色
  }

  return request({
    url: "students",
    method: "post",
    data: studentData
  })
}

/**
 * 获取用户信息
 * 接口描述: 根据token获取当前登录用户信息
 * @returns Promise
 */
export function getUserInfoApi() {
  return request({
    url: "auth/userinfo",
    method: "get"
  })
}

/**
 * 用户登出
 * 接口描述: 用户退出登录
 * @returns Promise
 */
export function logoutApi() {
  return request({
    url: "auth/logout",
    method: "post"
  })
}

/**
 * 修改密码
 * 接口描述: 用户修改密码
 * 接口必填项:
 * oldPassword-原密码
 * newPassword-新密码
 * @param {Object} data 密码数据
 * @returns Promise
 */
export function changePasswordApi(data) {
  return request({
    url: "auth/change-password",
    method: "put",
    data
  })
}

/**
 * 检查用户名是否存在
 * 接口描述: 注册时检查学号是否已被使用
 * 注意：暂时返回成功，实际检查在注册时进行
 * @param {string} studentId 学号
 * @returns Promise
 */
export function checkStudentIdApi(studentId) {
  // 暂时返回一个成功的Promise，避免接口不存在的错误
  // 实际的学号重复检查会在注册时由后端进行
  return Promise.resolve({
    code: 200,
    message: "学号可用",
    data: null
  })
}

// 导出用户API对象，方便统一管理
export const userApi = {
  login: loginApi,
  register: registerApi,
  getUserInfo: getUserInfoApi,
  logout: logoutApi,
  changePassword: changePasswordApi,
  checkStudentId: checkStudentIdApi
}
